home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / c / egem_210 / egem / source / filetool.c < prev    next >
C/C++ Source or Header  |  1995-11-25  |  2KB  |  145 lines

  1.  
  2. #include "proto.h"
  3. #include <string.h>
  4.  
  5. #define strclr(p)    *p = '\0'
  6.  
  7. static char *strend(reg char *str)
  8. {
  9.     while (*str++);
  10.     return (--str);
  11. }
  12.  
  13. static char *yen2slash(char *p)
  14. {
  15.     reg char *d = p,c,s;
  16.  
  17.     s = '/';
  18.     while ((c=*d++)!='\0')
  19.         if (c==s)
  20.             d[-1]='\\';
  21.  
  22.     s = '\\';
  23.     d = p;
  24.     while ((c=*d++)!='\0')
  25.     {
  26.         if (c==s && *d==s)
  27.         {
  28.             d--;
  29.             strcpy(d,d+1);
  30.         }
  31.     }
  32.  
  33.     return (p);
  34. }
  35.  
  36. char *GetFilename(char *path)
  37. {
  38.     reg char *p,*q;
  39.  
  40.     p = q = yen2slash(path);
  41.     while ((q=strpbrk(p,":\\"))!=NULL)
  42.     {
  43.         q++;
  44.         p = q;
  45.     }
  46.  
  47.     if (!strcmp(p,".") || !strcmp(p,".."))
  48.     {
  49.         p = strend(p);
  50.         *p++ = '\\';
  51.         *p = '\0';
  52.     }
  53.     else if (p>path && p[-1]==':')
  54.     {
  55.         *p++ = '\\';
  56.         *p = '\0';
  57.     }
  58.  
  59.     return (p);
  60. }
  61.  
  62. char *GetPath(char *fname)
  63. {
  64.     reg char *file = GetFilename(fname);
  65.     strclr(file);
  66.     return (file);
  67. }
  68.  
  69. char *GetExtension(char *path)
  70. {
  71.     reg char *p,*q;
  72.  
  73.     p = GetFilename(path);
  74.     if ((q=strrchr(p,'.'))>=p)
  75.         return (q);
  76.     else
  77.         return (strend(p));
  78. }
  79.  
  80. int GetDrive(char *path)
  81. {
  82.     if (path[0]!='\0' && path[1]==':')
  83.         return (UpperChar(path[0]) - 'A');
  84.     else
  85.         return (Dgetdrv());
  86. }
  87.  
  88. char *MakeFullpath(char *dest,char *path,char *file)
  89. {
  90.     reg char *last;
  91.  
  92.     if (path)
  93.         strcpy(dest,path);
  94.     yen2slash(dest);
  95.  
  96.     if ((last=strend(dest))>dest && last[-1]!='\\')
  97.     {
  98.         *last++ = '\\';
  99.         strcpy(last,file);
  100.     }
  101.     else
  102.         strcat(dest,file);
  103.  
  104.     return (dest);
  105. }
  106.  
  107. int FileSelect(char *title,char *path,char *fname,char *sel,int no_insel)
  108. {
  109.     int button,err;
  110.  
  111.     if (sel==NULL || *sel=='\0')
  112.         sel = "*.*";
  113.  
  114.     if (no_insel)
  115.         strclr(fname);
  116.  
  117.     MakeFullpath(path,NULL,sel);
  118.     if (aes_version>=0x0140 || get_cookie((long) 'FSEL',NULL))
  119.         err = fsel_exinput(path,fname,&button,title);
  120.     else
  121.         err = fsel_input(path,fname,&button);
  122.  
  123.     _reset_mouse();
  124.  
  125.     if (err && button)
  126.     {
  127.         GetPath(path);
  128.         return (TRUE);
  129.     }
  130.     else
  131.         return (FALSE);
  132. }
  133.  
  134. void drive_changed(int drive)
  135. {
  136.     int msg[8];
  137.  
  138.     if (drive==('U'-'A'))
  139.         drive = -1;
  140.  
  141.     msg[0] = SH_WDRAW;
  142.     msg[3] = drive;
  143.     XAccBroadCast(msg);
  144. }
  145.